/******************************************************************************************
 *****                              File Description Table                              ***
 ******************************************************************************************
 *                                                                                        *
 *               File Name          :   SequenceList.h                                    *
 *                                                                                        *
 *               Author             :   cxm                                               *
 *                                                                                        *
 *               Creation Date      :   2025/03/17                                        *
 *                                                                                        *
 *               Last Modifief Date :   2025/03/17                                        *
 *                                                                                        *
 *----------------------------------------------------------------------------------------*
 * Description: 
 * 1.   顺序表定义及操作声明
 *========================================================================================*/
 
 #ifndef _SEQUENCELIST_H_
 #define _SEQUENCELIST_H_   
 
/******************************************************************************************
*                                 头 文 件 引 用                             
*========================================================================================*/
#include "sys_type_define.h"                                                                   
                                 
/******************************************************************************************
*                                 结 构 体 定 义                             
*========================================================================================*/
typedef struct
{
    INT8U   auch_name[20];  /* 顺序表表名 */
    INT16S *psh_Base;       /* 顺序表起始基址 */
    INT16U  ush_Len;        /* 顺序表现有长度 */
    INT16U  ush_MaxLen;     /* 顺序表最大长度 */
}SqList;                                                                   
                                                       
/******************************************************************************************
*                                 全 局 变 量 声 明                            
*========================================================================================*/
/** 
 * @brief: 全局顺序表1 定义
 * 
 */
extern SqList gst_sqlist1;          

/** 
 * @brief: 全局顺序表2 定义
 * 
 */
extern SqList gst_sqlist2;                                                       
                                                       
/******************************************************************************************
*                                 对 外 函 数 接 口 声 明                         
*========================================================================================*/

/** 
 * @brief: 顺序表 初始化
 * 
 * @param: 
 *      [in] pst_List   : 顺序表
 *      [in] ush_MaxLen : 最大长度
 * 
 * @return: 
 *      [out] TRUE  : 初始化成功
 *      [out] FALSE : 初始化失败
 */
extern BOOL SqList_Init(SqList *pst_List, INT16U ush_MaxLen);

/** 
 * @brief: 顺序表 销毁
 * 
 * @param: 
 *      [in] pst_List: 顺序表
 * 
 * @return: 
 *      [out] TRUE  : 销毁成功
 *      [out] FALSE : 销毁失败
 */
extern BOOL SqList_DeInit(SqList *pst_List);

/** 
 * @brief: 添加数值到顺序表末尾
 * 
 * @param: 
 *      [in] pst_List: 顺序表
 *      [in] sh_Val  : 待添加数值
 * 
 * @return: 
 *      [out] TRUE  : 添加成功
 *      [out] FALSE : 添加失败
 */
extern BOOL Sqlist_Add(SqList *pst_List, INT16S sh_Val);

/** 
 * @brief: 删除顺序表中指定位置的数值并返回
 * 
 * @param: 
 *      [in] pst_List       : 顺序表
 *      [in] ush_Idx        : 指定位置
 *      [in][out] psh_Val   : 返回的数值
 * 
 * @return: 
 *      [out] TRUE  : 删除成功
 *      [out] FALSE : 删除失败
 */
extern BOOL SqList_Delete(SqList *pst_List, INT16U ush_Idx, INT16S *psh_Val);

/** 
 * @brief: 在顺序表的指定位置插入数值
 * 
 * @param: 
 *      [in] pst_List       : 顺序表
 *      [in] ush_Idx        : 指定位置
 *      [in][out] psh_Val   : 插入的数值
 * 
 * @return: 
 *      [out] TRUE  : 插入成功
 *      [out] FALSE : 插入失败
 */
extern BOOL SqList_Insert(SqList *pst_List, INT16U ush_Idx, INT16S sh_Val);

/** 
 * @brief: 返回顺序表中指定位置的数值
 * 
 * @param: 
 *      [in] pst_List       : 顺序表
 *      [in] ush_Idx        : 指定位置
 *      [in][out] psh_Val   : 返回的数值
 * 
 * @return: 
 *      [out] TRUE  : 查找成功
 *      [out] FALSE : 查找失败
 */
extern BOOL SqList_SearchByIdx(SqList *pst_List, INT16U ush_Idx, INT16S *psh_Val);

/** 
 * @brief: 查找某个元素在顺序表中第一次出现的位置
 * 
 * @param: 
 *      [in] pst_List       : 顺序表
 *      [in] push_Idx       : 查找到的位置
 *      [in][out] sh_Val    : 指定数值的数值
 * 
 * @return: 
 *      [out] TRUE  : 查找成功
 *      [out] FALSE : 查找失败
 */
extern BOOL SqList_SearchByVal(SqList *pst_List, INT16U *push_Idx, INT16S sh_Val);

/** 
 * @brief: 查找顺序表中的最大值
 * 
 * @param: 
 *      [in] pst_List       : 顺序表
 *      [in][out] psh_Val   : 返回的数值
 * 
 * @return: 
 *      [out] TRUE  : 查找成功
 *      [out] FALSE : 查找失败
 */
extern BOOL SqList_SearchMaxVal(SqList *pst_List, INT16S *psh_Val);

/** 
 * @brief: 查找顺序表中的最小值
 * 
 * @param: 
 *      [in] pst_List       : 顺序表
 *      [in][out] psh_Val   : 返回的数值
 * 
 * @return: 
 *      [out] TRUE  : 查找成功
 *      [out] FALSE : 查找失败
 */
extern BOOL SqList_SearchMinVal(SqList *pst_List, INT16S *psh_Val);

/** 
 * @brief: 顺序表 是否为空
 * 
 * @param: 
 *      [in] pst_List: 顺序表
 * 
 * @return: 
 *      [out] TRUE  : 顺序表为空
 *      [out] FALSE : 顺序表不为空
 */
extern BOOL SqList_IsEmpty(SqList *pst_List);

/** 
 * @brief: 合并两个顺序表
 * 
 * @param: 
 *      [in] pst_List    : 合并的顺序表
 *      [in] pst_List1   ：待合并的顺序表1
 *      [in] pst_List2   ：待合并的顺序表2
 * 
 * @return: 
 *      [out] TRUE  : 合并成功
 *      [out] FALSE : 合并失败
 *
 */
extern BOOL SqList_Merge(SqList *pst_List, SqList *pst_List1, SqList *pst_List2);

/** 
 * @brief: 顺序表 清空
 * 
 * @param: 
 *      [in] pst_List: 顺序表
 * 
 * @return: 
 *      [out] TRUE  : 清空成功
 *      [out] FALSE : 清空失败
 */
extern BOOL SqList_Clean(SqList *pst_List);

/** 
 * @brief: 顺序表 冒泡排序（从小到大排序）
 * 
 * @param: 
 *      [in] pst_List: 顺序表
 * 
 * @return: 
 *      [out] TRUE  : 排序成功
 *      [out] FALSE : 排序失败
 */
extern BOOL SqList_BubbleSort(SqList *pst_List);

/** 
 * @brief: 顺序表 打印
 * 
 * @param: 
 *      [in] pst_List: 顺序表
 * 
 * @return: 
 *      [out] TRUE  : 成功
 *      [out] FALSE : 失败
 */
extern BOOL SqList_Print(SqList *pst_List);

#endif // _SEQUENCELIST_H_